using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;

public class Lesson13 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        #region 知识点一 资源更新指的是什么？
        //当项目正式发布后，对于远程加载的资源
        //我们可以通过改变资源服务器上的AB包内容来达到更新游戏的目的
        //Addressables会自动帮助我们判断哪些资源更新了，并加载最新的内容
        #endregion

        #region 知识点二 内容更新限制参数回顾
        //在组设置中有一个内容更新限制的设置
        //Content Update Restriction

        //Can Change Post Release：
        //可以改变发行后内容，该模式不移动任何资源，如果包中的任何资源发生了更改，则重新构建整个包

        //Cannot Change Post Release：
        //无法改变发布后内容，如果包中任何资源已经改变，
        //则[检查内容更新限制]工具会将其移动到为更新创建的新组中。
        //在进行更新构建时，从这个新组创建的AssetBundles中的资产将覆盖现有包中的版本。
        #endregion

        #region 知识点三 整包更新
        //组设置为 Can Change Post Release
        //整包更新指，某一个分组的资源发生变化后
        //我们需要将其整体进行打包
        //这种方式比较适用于大范围资源更新时使用
        //坏处是，玩家需要下载的内容较大，比较耗时耗流量
        Addressables.LoadAssetsAsync<GameObject>(new List<string>() { "Cube", "SD" }, (obj) =>
        {
            Instantiate(obj);
        }, Addressables.MergeMode.Intersection);

        //注意：Unity自带的 资源服务器模拟工具有问题 有的时候明明开启了服务 但是加载不成功
        //我们干脆就使用第三方工具来搭建我们的模拟本地资源服务器
        #endregion

        #region 知识点四 局部更新
        //组设置为 Cannot Change Post Release
        //局部更新指，当组中有资源发生变化时
        //我们可以单为发生变化的内容生成AB包
        //之后使用该资源时，Addressables会自动加载最新的内容
        //它相对整包更新来说，更节约时间和流量
        #endregion

        #region 总结
        //远程资源包时整包更新还是局部更新
        //取决于Content Update Restriction内容更新限制参数
        //可以根据自己项目的实际情况选择具体使用哪种方式即可
        #endregion
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}
